#!/usr/bin/python
# -*- coding: utf-8 -*-

# Модуль загрузки сценариев игр

# has_cenario: [-1,0,1,2]. -1 - сценарий еще не загружался, 0 - сценарий недоступен, 2 - сценарий загружен но не распарсен, 1- сценарий доступен и разобран.

from DbShell import Db
import time
import Loader, EnLib

db = Db()

def storeScenario(gameId, domain, text):
    cdate = time.strftime("%Y-%m-%d %H:%M:%S")
    #src = unicode(db.escape(text),'utf-8','ignore').encode('utf-8','ignore')
    textLen = len(text)
    scenarioPath = EnLib.makeGamePath(domain, gameId) + '%s_scenario.html' % (gameId,)
    file = open(scenarioPath,'w',0755)
    if file:
        file.write(text)
        file.close()
        cdate = time.strftime("%Y-%m-%d %H:%M:%S")
        if textLen < 2500:      # Если размер сценария меньше 1800 байт, то почти наверняка сценарий недоступен
            has_scenario = 0    # Сценарий не доступен, сообщение загружено 
        else:
            has_scenario = 1    # Сценарий загружен и доступен
        q = "UPDATE enlab_games SET `has_scenario`=%d, `scenario_updated`='%s' WHERE `game_id`=%s" % (has_scenario,cdate,gameId)
        db.query(q)
    return
    
log = "STARTED at " + time.strftime("%Y-%m-%d %H:%M:%S")+"\n"

try:
	EnLib.checkFileStorage()

	q = "SELECT game_id, game_domain FROM enlab_games WHERE `has_scenario`=-1 ORDER BY `game_domain`, `game_id`"
	db.query(q)
	games = db.fetchall()
	log = log + ("Will load %d scenarios:" %len(games) )
	for g in games:
		gameId = g[0]
		domain = g[1]
		log = log +  ("\n %s gid: %s ..." % (domain,gameId) )
		text = Loader.getScenarioSource(domain,gameId)
		storeScenario(gameId, domain, text)
		log = log +  "saved\n"
except Exception,e:
	print e
	print "Detailed log: \n", log
#log = log +  "\nFINISHED at %s" % (time.strftime("%Y-%m-%d %H:%M:%S"), )